home *** CD-ROM | disk | FTP | other *** search
/ Game Cracker (Expanded Edition) / Game Cracker (Expanded Edition).iso / cracks / SV_SMSTR.ZIP / ShadowMaster.txt < prev   
Text File  |  1998-11-02  |  33KB  |  697 lines

  1.  
  2. Free Information Xchange presents:
  3.  
  4. ShadowMaster - CD crack by Static Vengeance Sep 13, 1998
  5.  
  6. REQUIREMENTS:
  7. Hex Editor and full game install
  8. W32Dasm if you wish to follow along
  9.  
  10.     Shadow Master from Psygnosis is a first person shoot in same vain as Doom, but with a couple
  11. of twists!  First off, instead of running a round you criuse around in a buggy/land rover.  Then you
  12. have great graphics with creatures that seemed to be right out of Aliens!  Two things that bothered
  13. me about this game are first, the CD check!  That above all needs to be FiX'ed.  Then there's the
  14. amount of disk space reqiured for this game.  With a complete game install you'll end up filling over
  15. 425 megs of your hard disk.  We'll see what we can do about that as well.  So let's get going: Fire up
  16. W32Dasm and disassemble the rmg.exe file.  Now go to the menu bar and select refs, then data string refs
  17. from the drop down menu.  Looking for usefull strings to click on, we really don't find any.  So our next
  18. method is to search for GetDriveTypeA.  This a KERNEL32.DLL call that is used in most of the CD checks I
  19. have seen.  Either way, you'll find an occurrance that deals with the CD check.  Here is what you'll find:
  20.  
  21. * Referenced by a CALL at Addresses:
  22. |:00423428   , :00423459   , :004234CD   , :004240C1   , :00425269     <-- Call by 10 other routines
  23. |:004671D3   , :00467206   , :00468D42   , :004693EC   , :004693FE   
  24. |
  25. :004318B0 A03CD25900              mov al, byte ptr [0059D23C]
  26. :004318B5 83EC64                  sub esp, 00000064
  27. :004318B8 A880                    test al, 80
  28. :004318BA 53                      push ebx
  29. :004318BB 56                      push esi
  30. :004318BC 57                      push edi
  31. :004318BD 740C                    je 004318CB                   <-- Conditional jump to CD check
  32. :004318BF B801000000              mov eax, 00000001
  33. :004318C4 5F                      pop edi
  34. :004318C5 5E                      pop esi
  35. :004318C6 5B                      pop ebx
  36. :004318C7 83C464                  add esp, 00000064
  37. :004318CA C3                      ret
  38.  
  39. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  40. |:004318BD(C)
  41. |
  42. * Possible StringData Ref from Data Obj ->"pcextras\circ.cir"    <-- Check for this file
  43.                                   |
  44. :004318CB 68144A4D00              push 004D4A14
  45. :004318D0 E8ABD60500              call 0048EF80
  46. :004318D5 83C404                  add esp, 00000004
  47. :004318D8 50                      push eax
  48. :004318D9 8D442410                lea eax, dword ptr [esp+10]
  49. :004318DD 50                      push eax
  50. :004318DE E8BDD60600              call 0049EFA0
  51. :004318E3 83C408                  add esp, 00000008
  52. :004318E6 8D4C240C                lea ecx, dword ptr [esp+0C]
  53. :004318EA 6A3A                    push 0000003A
  54. :004318EC 51                      push ecx
  55. :004318ED E83EED0600              call 004A0630
  56. :004318F2 83C408                  add esp, 00000008
  57. :004318F5 8D54240C                lea edx, dword ptr [esp+0C]
  58. :004318F9 C6400100                mov [eax+01], 00
  59. :004318FD 52                      push edx
  60.  
  61. * Reference To: KERNEL32.GetDriveTypeA, Ord:00DFh                <-- Commonly used in CD checks
  62.                                   |
  63. :004318FE FF15F073EC00            Call dword ptr [00EC73F0]
  64. :00431904 83F805                  cmp eax, 00000005              <-- 05 is the value for a CD Rom drive
  65. :00431907 0F8585000000            jne 00431992                   <-- Not a CD Rom, then jump here
  66.  
  67. * Possible StringData Ref from Data Obj ->"\"
  68.                                   |
  69. :0043190D BF104A4D00              mov edi, 004D4A10
  70. :00431912 83C9FF                  or ecx, FFFFFFFF
  71. :00431915 33C0                    xor eax, eax
  72. :00431917 8D54240C                lea edx, dword ptr [esp+0C]
  73. :0043191B F2                      repnz
  74. :0043191C AE                      scasb
  75. :0043191D F7D1                    not ecx
  76. :0043191F 2BF9                    sub edi, ecx
  77.  
  78. * Possible StringData Ref from Data Obj ->"rb"                   <-- Read binary call
  79.                                   |
  80. :00431921 68CCE14A00              push 004AE1CC
  81. :00431926 8BF7                    mov esi, edi
  82. :00431928 8BD9                    mov ebx, ecx
  83. :0043192A 8BFA                    mov edi, edx
  84. :0043192C 83C9FF                  or ecx, FFFFFFFF
  85. :0043192F F2                      repnz
  86. :00431930 AE                      scasb
  87. :00431931 8BCB                    mov ecx, ebx
  88. :00431933 4F                      dec edi
  89. :00431934 C1E902                  shr ecx, 02
  90. :00431937 F3                      repz
  91. :00431938 A5                      movsd
  92. :00431939 8BCB                    mov ecx, ebx
  93. :0043193B 8D542410                lea edx, dword ptr [esp+10]
  94. :0043193F 83E103                  and ecx, 00000003
  95. :00431942 F3                      repz
  96. :00431943 A4                      movsb
  97.  
  98. * Possible StringData Ref from Data Obj ->"pcextras\circ.cir"   <-- File to check for again
  99.                                   |
  100. :00431944 BF144A4D00              mov edi, 004D4A14
  101. :00431949 83C9FF                  or ecx, FFFFFFFF
  102. :0043194C F2                      repnz
  103. :0043194D AE                      scasb
  104. :0043194E F7D1                    not ecx
  105. :00431950 2BF9                    sub edi, ecx
  106. :00431952 8BF7                    mov esi, edi
  107. :00431954 8BD9                    mov ebx, ecx
  108. :00431956 8BFA                    mov edi, edx
  109. :00431958 83C9FF                  or ecx, FFFFFFFF
  110. :0043195B F2                      repnz
  111. :0043195C AE                      scasb
  112. :0043195D 8BCB                    mov ecx, ebx
  113. :0043195F 4F                      dec edi
  114. :00431960 C1E902                  shr ecx, 02
  115. :00431963 F3                      repz
  116. :00431964 A5                      movsd
  117. :00431965 8BCB                    mov ecx, ebx
  118. :00431967 8D442410                lea eax, dword ptr [esp+10]
  119. :0043196B 83E103                  and ecx, 00000003
  120. :0043196E 50                      push eax
  121. :0043196F F3                      repz
  122. :00431970 A4                      movsb
  123. :00431971 E86AD90600              call 0049F2E0
  124. :00431976 83C408                  add esp, 00000008
  125. :00431979 85C0                    test eax, eax
  126. :0043197B 7415                    je 00431992            <-- Take this jump for a fail attempt
  127. :0043197D 50                      push eax
  128. :0043197E E87DD90600              call 0049F300
  129. :00431983 83C404                  add esp, 00000004
  130. :00431986 B801000000              mov eax, 00000001      <-- Set up for a passed CD check
  131. :0043198B 5F                      pop edi
  132. :0043198C 5E                      pop esi
  133. :0043198D 5B                      pop ebx
  134. :0043198E 83C464                  add esp, 00000064
  135. :00431991 C3                      ret
  136.  
  137. * Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
  138. |:00431907(C), :0043197B(C)
  139. |
  140. :00431992 5F                      pop edi
  141. :00431993 5E                      pop esi
  142. :00431994 33C0                    xor eax, eax           <-- Set up for a failed CD check
  143. :00431996 5B                      pop ebx
  144. :00431997 83C464                  add esp, 00000064
  145. :0043199A C3                      ret
  146. :0043199B 90                      nop
  147.  
  148.     This is a very short and simplistic CD Rom check.  The only thing you need to do to bypass this
  149. CD check is NOP the conditional jump at 4318BD.  The game will then call the CD check as many times as
  150. it wants to but fall right through and load eax with 00000001 and return.  The value of 00000001 means
  151. (to Shadowmaster) the CD check passed.  A simple two byte patch is all that's required to crack this one.
  152.     However, there are a other things that need to be addressed with ShadowMaster.  The first issue
  153. is the amount of hard drive space required for a complete game install.  ShadowMaster takes up ~425
  154. megs(!!) on your hard with full music and all the videos.  So to free up 202 megs of hard drive space
  155. we will need to stop any/all videos from being played.  Within W32Dasm, I looked for references to any
  156. of the video and didn't find any.  However, I found a reference to ".mpg" of which all the game videos
  157. are.  Double clicking on that ref put me in the middle of this routine:
  158.  
  159. * Referenced by a CALL at Addresses:
  160. |:00468AF0   , :00468B20   , :00468B35   , :00468B43   , :00468B69   
  161. |:00468B77   , :00468B85   , :00468B93   , :00468BA1   , :00468BD9   
  162. |:00468BE7   , :00468BF5   , :00468C03   , :00468C11   
  163. |
  164. :004689E0 83EC64                  sub esp, 00000064
  165. :004689E3 53                      push ebx
  166. :004689E4 55                      push ebp
  167. :004689E5 56                      push esi
  168. :004689E6 57                      push edi
  169. :004689E7 33DB                    xor ebx, ebx
  170. :004689E9 E892BBFCFF              call 00434580            <-- We will make use of this call
  171. :004689EE E8ADBDFCFF              call 004347A0
  172. :004689F3 E888BBFCFF              call 00434580
  173. :004689F8 E8A3BDFCFF              call 004347A0
  174. :004689FD A180115200              mov eax, dword ptr [00521180]
  175. :00468A02 8B0D84115200            mov ecx, dword ptr [00521184]
  176. :00468A08 8B7C2478                mov edi, dword ptr [esp+78]
  177. :00468A0C 89442410                mov dword ptr [esp+10], eax
  178. :00468A10 894C2414                mov dword ptr [esp+14], ecx
  179. :00468A14 83C9FF                  or ecx, FFFFFFFF
  180. :00468A17 33C0                    xor eax, eax
  181. :00468A19 8D542410                lea edx, dword ptr [esp+10]
  182. :00468A1D F2                      repnz
  183. :00468A1E AE                      scasb
  184. :00468A1F F7D1                    not ecx
  185. :00468A21 2BF9                    sub edi, ecx
  186. :00468A23 8BF7                    mov esi, edi
  187. :00468A25 8BE9                    mov ebp, ecx
  188. :00468A27 8BFA                    mov edi, edx
  189. :00468A29 83C9FF                  or ecx, FFFFFFFF
  190. :00468A2C F2                      repnz
  191. :00468A2D AE                      scasb
  192. :00468A2E 8BCD                    mov ecx, ebp
  193. :00468A30 4F                      dec edi
  194. :00468A31 C1E902                  shr ecx, 02
  195. :00468A34 F3                      repz
  196. :00468A35 A5                      movsd
  197. :00468A36 8BCD                    mov ecx, ebp
  198. :00468A38 8D542410                lea edx, dword ptr [esp+10]
  199. :00468A3C 83E103                  and ecx, 00000003
  200. :00468A3F F3                      repz
  201. :00468A40 A4                      movsb
  202.  
  203. * Possible StringData Ref from Data Obj ->".mpg"             <-- The ref that got us here
  204.                                   |
  205. :00468A41 BF78115200              mov edi, 00521178
  206. :00468A46 83C9FF                  or ecx, FFFFFFFF
  207. :00468A49 F2                      repnz
  208. :00468A4A AE                      scasb
  209. :00468A4B F7D1                    not ecx
  210. :00468A4D 2BF9                    sub edi, ecx
  211. :00468A4F 8BF7                    mov esi, edi
  212. :00468A51 8BE9                    mov ebp, ecx
  213. :00468A53 8BFA                    mov edi, edx
  214. :00468A55 83C9FF                  or ecx, FFFFFFFF
  215. :00468A58 F2                      repnz
  216. :00468A59 AE                      scasb
  217. :00468A5A 8BCD                    mov ecx, ebp
  218. :00468A5C 4F                      dec edi
  219. :00468A5D C1E902                  shr ecx, 02
  220. :00468A60 F3                      repz
  221. :00468A61 A5                      movsd
  222. :00468A62 8BCD                    mov ecx, ebp
  223. :00468A64 8D442410                lea eax, dword ptr [esp+10]
  224. :00468A68 83E103                  and ecx, 00000003
  225. :00468A6B 50                      push eax
  226. :00468A6C F3                      repz
  227. :00468A6D A4                      movsb
  228. :00468A6E E81D43FDFF              call 0043CD90
  229. :00468A73 83C404                  add esp, 00000004
  230. :00468A76 85C0                    test eax, eax
  231. :00468A78 7418                    je 00468A92
  232. :00468A7A 8D4C2410                lea ecx, dword ptr [esp+10]
  233. :00468A7E 51                      push ecx
  234. :00468A7F E85C650200              call 0048EFE0
  235. :00468A84 83C404                  add esp, 00000004
  236. :00468A87 50                      push eax
  237. :00468A88 E8A3E9FAFF              call 00417430
  238. :00468A8D 83C404                  add esp, 00000004
  239. :00468A90 8BD8                    mov ebx, eax
  240.  
  241. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  242. |:00468A78(C)
  243. |
  244. :00468A92 E8E9BAFCFF              call 00434580
  245. :00468A97 E804BDFCFF              call 004347A0
  246. :00468A9C E8DFBAFCFF              call 00434580
  247. :00468AA1 E8FABCFCFF              call 004347A0
  248. :00468AA6 5F                      pop edi                     <-- Idealy I just want to get here
  249. :00468AA7 5E                      pop esi
  250. :00468AA8 8BC3                    mov eax, ebx
  251. :00468AAA 5D                      pop ebp
  252. :00468AAB 5B                      pop ebx
  253. :00468AAC 83C464                  add esp, 00000064
  254. :00468AAF C3                      ret
  255.  
  256.     There are way too many calls to track down and patch, why make 14 patches if you can do the same
  257. with less.  The idea is just to exit the routine as fast as possible executing as few instructions as
  258. possible.  I decided to change the very first call to a jump 468AA6.  This can be accomplished by 
  259. calculating the jump's offset, or the displacement.  As you will see the correct offset is B8 in hex.
  260. Changing the E8 92 BB FC FF to E9 B8 00 00 00 elimenates the playing of the videos.  Now you can safely
  261. delete the directory "Movies" from the ShadowMaster game directory.
  262.     Not bad, we just dropped the amount of disk space from 425 megs down to 172 megs.  However, if
  263. you're willing to give up the music on each of the levels you can get the space required down to a "mere"
  264. 60 megs.  This means we'll have to track down the routine(s) responsible for playing the level wav files.
  265.     Looking for a ref to music I found "music\", double clicking this put in this LONG routine:
  266.  
  267. * Referenced by a CALL at Addresses:
  268. |:004086E8   , :004089C2                                          <-- Call by two different routines
  269. |
  270. :00408700 8B442404                mov eax, dword ptr [esp+04]
  271. :00408704 81ECC8000000            sub esp, 000000C8
  272. :0040870A 85C0                    test eax, eax
  273. :0040870C 740D                    je 0040871B
  274. :0040870E A11CD25900              mov eax, dword ptr [0059D21C]
  275. :00408713 85C0                    test eax, eax
  276. :00408715 0F85E5010000            jne 00408900
  277.  
  278. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  279. |:0040870C(C)
  280. |
  281. :0040871B A1D055EC00              mov eax, dword ptr [00EC55D0]
  282. :00408720 8B15CC55EC00            mov edx, dword ptr [00EC55CC]
  283. :00408726 40                      inc eax
  284. :00408727 A3D055EC00              mov dword ptr [00EC55D0], eax
  285. :0040872C 8A0C42                  mov cl, byte ptr [edx+2*eax]
  286. :0040872F 80F9FF                  cmp cl, FF
  287. :00408732 7504                    jne 00408738
  288. :00408734 33C0                    xor eax, eax
  289. :00408736 EB0A                    jmp 00408742
  290.  
  291. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  292. |:00408732(C)
  293. |
  294. :00408738 80F9FE                  cmp cl, FE
  295. :0040873B 750A                    jne 00408747
  296. :0040873D B801000000              mov eax, 00000001
  297.  
  298. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  299. |:00408736(U)
  300. |
  301. :00408742 A3D055EC00              mov dword ptr [00EC55D0], eax
  302.  
  303. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  304. |:0040873B(C)
  305. |
  306. :00408747 0FBE0442                movsx eax, byte ptr [edx+2*eax]
  307. :0040874B 83C0FE                  add eax, FFFFFFFE
  308. :0040874E 83F819                  cmp eax, 00000019
  309. :00408751 0F8777010000            ja 004088CE                         <-- Is offset too high? Then jump here
  310. :00408757 33C9                    xor ecx, ecx
  311. :00408759 8A8838894000            mov cl, byte ptr [eax+00408938]
  312. :0040875F FF248D08894000          jmp dword ptr [4*ecx+00408908]      <-- Jump through wav file jump table
  313. :00408766 A1C0816F00              mov eax, dword ptr [006F81C0]
  314. :0040876B 83F804                  cmp eax, 00000004
  315. :0040876E 0F875A010000            ja 004088CE                         <-- Jump to exit section
  316. :00408774 FF248554894000          jmp dword ptr [4*eax+00408954]
  317. :0040877B A1803FC100              mov eax, dword ptr [00C13F80]
  318. :00408780 8D4C2400                lea ecx, dword ptr [esp]
  319. :00408784 8BD0                    mov edx, eax
  320. :00408786 C1E206                  shl edx, 06
  321. :00408789 03D0                    add edx, eax
  322. :0040878B 8D0495C092A700          lea eax, dword ptr [4*edx+00A792C0]
  323. :00408792 50                      push eax
  324.  
  325. * Possible StringData Ref from Data Obj ->"%sbriefing.wav"            <-- Briefing wav files starting here
  326.                                   |
  327. :00408793 682CB44C00              push 004CB42C
  328. :00408798 51                      push ecx
  329. :00408799 E928010000              jmp 004088C6
  330. :0040879E A1803FC100              mov eax, dword ptr [00C13F80]
  331. :004087A3 8D4C2400                lea ecx, dword ptr [esp]
  332. :004087A7 8BD0                    mov edx, eax
  333. :004087A9 C1E206                  shl edx, 06
  334. :004087AC 03D0                    add edx, eax
  335. :004087AE 8D0495C092A700          lea eax, dword ptr [4*edx+00A792C0]
  336. :004087B5 50                      push eax
  337.  
  338. * Possible StringData Ref from Data Obj ->"%sbrief_f.wav"
  339.                                   |
  340. :004087B6 681CB44C00              push 004CB41C
  341. :004087BB 51                      push ecx
  342. :004087BC E905010000              jmp 004088C6
  343. :004087C1 A1803FC100              mov eax, dword ptr [00C13F80]
  344. :004087C6 8D4C2400                lea ecx, dword ptr [esp]
  345. :004087CA 8BD0                    mov edx, eax
  346. :004087CC C1E206                  shl edx, 06
  347. :004087CF 03D0                    add edx, eax
  348. :004087D1 8D0495C092A700          lea eax, dword ptr [4*edx+00A792C0]
  349. :004087D8 50                      push eax
  350.  
  351. * Possible StringData Ref from Data Obj ->"%sbrief_g.wav"
  352.                                   |
  353. :004087D9 680CB44C00              push 004CB40C
  354. :004087DE 51                      push ecx
  355. :004087DF E9E2000000              jmp 004088C6
  356. :004087E4 A1803FC100              mov eax, dword ptr [00C13F80]
  357. :004087E9 8D4C2400                lea ecx, dword ptr [esp]
  358. :004087ED 8BD0                    mov edx, eax
  359. :004087EF C1E206                  shl edx, 06
  360. :004087F2 03D0                    add edx, eax
  361. :004087F4 8D0495C092A700          lea eax, dword ptr [4*edx+00A792C0]
  362. :004087FB 50                      push eax
  363.  
  364. * Possible StringData Ref from Data Obj ->"%sbrief_i.wav"
  365.                                   |
  366. :004087FC 68FCB34C00              push 004CB3FC
  367. :00408801 51                      push ecx
  368. :00408802 E9BF000000              jmp 004088C6
  369. :00408807 A1803FC100              mov eax, dword ptr [00C13F80]
  370. :0040880C 8D4C2400                lea ecx, dword ptr [esp]
  371. :00408810 8BD0                    mov edx, eax
  372. :00408812 C1E206                  shl edx, 06
  373. :00408815 03D0                    add edx, eax
  374. :00408817 8D0495C092A700          lea eax, dword ptr [4*edx+00A792C0]
  375. :0040881E 50                      push eax
  376.  
  377. * Possible StringData Ref from Data Obj ->"%sbrief_s.wav"
  378.                                   |
  379. :0040881F 68ECB34C00              push 004CB3EC
  380. :00408824 51                      push ecx
  381. :00408825 E99C000000              jmp 004088C6
  382.  
  383. * Possible StringData Ref from Data Obj ->"music\"                <-- The level music files start here
  384.                                   |
  385. :0040882A 68E4B34C00              push 004CB3E4
  386.  
  387. * Possible StringData Ref from Data Obj ->"%sindust.wav"
  388.                                   |
  389. :0040882F 68D4B34C00              push 004CB3D4
  390. :00408834 E988000000              jmp 004088C1
  391.  
  392. * Possible StringData Ref from Data Obj ->"music\"
  393.                                   |
  394. :00408839 68E4B34C00              push 004CB3E4
  395. :0040883E 8D442404                lea eax, dword ptr [esp+04]
  396.  
  397. * Possible StringData Ref from Data Obj ->"%siceplant.wav"
  398.                                   |
  399. :00408842 68C4B34C00              push 004CB3C4
  400. :00408847 50                      push eax
  401. :00408848 EB7C                    jmp 004088C6
  402.  
  403. * Possible StringData Ref from Data Obj ->"music\"
  404.                                   |
  405. :0040884A 68E4B34C00              push 004CB3E4
  406. :0040884F 8D4C2404                lea ecx, dword ptr [esp+04]
  407.  
  408. * Possible StringData Ref from Data Obj ->"%sdesert.wav"
  409.                                   |
  410. :00408853 68B4B34C00              push 004CB3B4
  411. :00408858 51                      push ecx
  412. :00408859 EB6B                    jmp 004088C6
  413.  
  414. * Possible StringData Ref from Data Obj ->"music\"
  415.                                   |
  416. :0040885B 68E4B34C00              push 004CB3E4
  417.  
  418. * Possible StringData Ref from Data Obj ->"%sruins.wav"
  419.                                   |
  420. :00408860 68A8B34C00              push 004CB3A8
  421. :00408865 EB5A                    jmp 004088C1
  422.  
  423. * Possible StringData Ref from Data Obj ->"music\"
  424.                                   |
  425. :00408867 68E4B34C00              push 004CB3E4
  426. :0040886C 8D442404                lea eax, dword ptr [esp+04]
  427.  
  428. * Possible StringData Ref from Data Obj ->"%sforest.wav"
  429.                                   |
  430. :00408870 6898B34C00              push 004CB398
  431. :00408875 50                      push eax
  432. :00408876 EB4E                    jmp 004088C6
  433.  
  434. * Possible StringData Ref from Data Obj ->"music\"
  435.                                   |
  436. :00408878 68E4B34C00              push 004CB3E4
  437. :0040887D 8D4C2404                lea ecx, dword ptr [esp+04]
  438.  
  439. * Possible StringData Ref from Data Obj ->"%sendboss.wav"
  440.                                   |
  441. :00408881 6888B34C00              push 004CB388
  442. :00408886 51                      push ecx
  443. :00408887 EB3D                    jmp 004088C6
  444.  
  445. * Possible StringData Ref from Data Obj ->"music\"
  446.                                   |
  447. :00408889 68E4B34C00              push 004CB3E4
  448.  
  449. * Possible StringData Ref from Data Obj ->"%sgeneric1.wav"
  450.                                   |
  451. :0040888E 6878B34C00              push 004CB378
  452. :00408893 EB2C                    jmp 004088C1
  453.  
  454. * Possible StringData Ref from Data Obj ->"music\"
  455.                                   |
  456. :00408895 68E4B34C00              push 004CB3E4
  457. :0040889A 8D442404                lea eax, dword ptr [esp+04]
  458.  
  459. * Possible StringData Ref from Data Obj ->"%sgeneric2.wav"
  460.                                   |
  461. :0040889E 6868B34C00              push 004CB368
  462. :004088A3 50                      push eax
  463. :004088A4 EB20                    jmp 004088C6
  464.  
  465. * Possible StringData Ref from Data Obj ->"music\"
  466.                                   |
  467. :004088A6 68E4B34C00              push 004CB3E4
  468. :004088AB 8D4C2404                lea ecx, dword ptr [esp+04]
  469.  
  470. * Possible StringData Ref from Data Obj ->"%sgeneric3.wav"
  471.                                   |
  472. :004088AF 6858B34C00              push 004CB358
  473. :004088B4 51                      push ecx
  474. :004088B5 EB0F                    jmp 004088C6
  475.  
  476. * Possible StringData Ref from Data Obj ->"music\"
  477.                                   |
  478. :004088B7 68E4B34C00              push 004CB3E4
  479.  
  480. * Possible StringData Ref from Data Obj ->"%sgeneric4.wav"
  481.                                   |
  482. :004088BC 6848B34C00              push 004CB348
  483.  
  484. * Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
  485. |:00408834(U), :00408865(U), :00408893(U)
  486. |
  487. :004088C1 8D542408                lea edx, dword ptr [esp+08]
  488. :004088C5 52                      push edx
  489.  
  490. * Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
  491. |:00408799(U), :004087BC(U), :004087DF(U), :00408802(U), :00408825(U)
  492. |:00408848(U), :00408859(U), :00408876(U), :00408887(U), :004088A4(U)
  493. |:004088B5(U)
  494. |
  495. :004088C6 E8D5660900              call 0049EFA0
  496. :004088CB 83C40C                  add esp, 0000000C
  497.  
  498. * Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
  499. |:00408751(C), :0040876E(C)
  500. |
  501. :004088CE 8D442400                lea eax, dword ptr [esp]
  502. :004088D2 50                      push eax
  503. :004088D3 E8B8440300              call 0043CD90
  504. :004088D8 83C404                  add esp, 00000004
  505. :004088DB 85C0                    test eax, eax
  506. :004088DD 740D                    je 004088EC
  507. :004088DF 8D4C2400                lea ecx, dword ptr [esp]
  508. :004088E3 51                      push ecx
  509. :004088E4 E887AD0700              call 00483670
  510. :004088E9 83C404                  add esp, 00000004
  511.  
  512. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  513. |:004088DD(C)
  514. |
  515. :004088EC C70514D2590000000000    mov dword ptr [0059D214], 00000000
  516. :004088F6 C70518D2590001000000    mov dword ptr [0059D218], 00000001
  517.  
  518. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  519. |:00408715(C)
  520. |
  521. :00408900 81C4C8000000            add esp, 000000C8
  522. :00408906 C3                      ret
  523. :00408907 90                      nop
  524.  
  525.   -- Jump table for playing level music and level briefings start here --
  526.  
  527. :00408908 66874000                DWORD 00408766  <-- Play a briefing wav file
  528. :0040890C 2A884000                DWORD 0040882A  <-- Play indust.wav file
  529. :00408910 39884000                DWORD 00408839  <-- Play iceplant.wav file
  530. :00408914 4A884000                DWORD 0040884A  <-- Play desert.wav file
  531. :00408918 5B884000                DWORD 0040885B  <-- Play ruins.wav file
  532. :0040891C 67884000                DWORD 00408867  <-- Play forest.wav file
  533. :00408920 78884000                DWORD 00408878  <-- Play endboss.wav file
  534. :00408924 89884000                DWORD 00408889  <-- Play generic1.wav file
  535. :00408928 95884000                DWORD 00408895  <-- Play generic2.wav file
  536. :0040892C A6884000                DWORD 004088A6  <-- Play generic3.wav file
  537. :00408930 B7884000                DWORD 004088B7  <-- Play generic4.wav file
  538. :00408934 CE884000                DWORD 004088CE  <-- Jump to the exit section
  539.  
  540. :00408938 00000000000000000000    BYTE 10 DUP(0)
  541. :00408942 0000000000              BYTE  5 DUP(0)
  542.  
  543. :00408947 00010203                DWORD 03020100
  544. :0040894A 04050607                DWORD 07060504
  545. :0040894F 0809                    WORD  0908
  546. :00408951 0A                      BYTE 0ah
  547. :00408952 8B                      BYTE 8bh
  548. :00408953 FF                      BYTE ffh
  549.  
  550. :00408954 7B874000                DWORD 0040877B  <-- Play briefing.wav file
  551. :00408958 9E874000                DWORD 0040879E  <-- Play brief_f.wav file
  552. :0040895C C1874000                DWORD 004087C1  <-- Play brief_g.wav file
  553. :00408960 E4874000                DWORD 004087E4  <-- Play brief_i.wav file
  554. :00408964 07884000                DWORD 00408807  <-- Play brief_s.wav file
  555.  
  556.     That was the routine responsible for playing the mission briefings and the level music wav
  557. files.  It's the section of music wav you want to kill, not the mission briefings as they are a vital
  558. part of the game.  The briefings let you know what to do and what's going on in the game for the next
  559. level to be played.  So now we need to trace each call and find a good place to make a patch to kill
  560. the music.
  561.  
  562. * Referenced by a CALL at Addresses:
  563. |:00404ED4   , :00468D51   , :004692F9                             <-- Called by 3 different places
  564. |
  565. :004086A0 8B442404                mov eax, dword ptr [esp+04]
  566. :004086A4 8B0DD0D25900            mov ecx, dword ptr [0059D2D0]
  567. :004086AA A3C855EC00              mov dword ptr [00EC55C8], eax
  568. :004086AF A3CC55EC00              mov dword ptr [00EC55CC], eax
  569. :004086B4 83C8FF                  or eax, FFFFFFFF
  570. :004086B7 83F903                  cmp ecx, 00000003
  571. :004086BA A3D055EC00              mov dword ptr [00EC55D0], eax
  572. :004086BF 740A                    je 004086CB
  573. :004086C1 8B0D1CD25900            mov ecx, dword ptr [0059D21C]
  574. :004086C7 85C9                    test ecx, ecx
  575. :004086C9 7507                    jne 004086D2
  576.  
  577. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  578. |:004086BF(C)
  579. |
  580. :004086CB 33C0                    xor eax, eax
  581. :004086CD A3D055EC00              mov dword ptr [00EC55D0], eax
  582.  
  583. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  584. |:004086C9(C)
  585. |
  586. :004086D2 8B0D803FC100            mov ecx, dword ptr [00C13F80]
  587. :004086D8 83F916                  cmp ecx, 00000016
  588. :004086DB 7C09                    jl 004086E6
  589. :004086DD 8D4408EA                lea eax, dword ptr [eax+ecx-16]
  590. :004086E1 A3D055EC00              mov dword ptr [00EC55D0], eax
  591.  
  592. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  593. |:004086DB(C)
  594. |
  595. :004086E6 6A00                    push 00000000
  596. :004086E8 E813000000              call 00408700             <-- Call the music "dispatch" routine
  597. :004086ED 83C404                  add esp, 00000004
  598. :004086F0 C3                      ret
  599.  
  600.     Time to check out the 3 calls to the above code and see what effect each has.  The call that
  601. came from 00404ED4 plays the mission briefings so we'll let this one come through.  Now lets track down
  602. the other two to see what they do:
  603.  
  604. * Referenced by a CALL at Address:
  605. |:0046901B   
  606. |
  607. :00468D20 A194D76E00              mov eax, dword ptr [006ED794]
  608. :00468D25 56                      push esi
  609. :00468D26 33F6                    xor esi, esi
  610. :00468D28 3BC6                    cmp eax, esi
  611. :00468D2A 8935249D7400            mov dword ptr [00749D24], esi
  612. :00468D30 7527                    jne 00468D59                        <-- Force this jump to kill music
  613. :00468D32 C705803FC10015000000    mov dword ptr [00C13F80], 00000015
  614. :00468D3C 8935D0D25900            mov dword ptr [0059D2D0], esi
  615. :00468D42 E8698BFCFF              call 004318B0
  616. :00468D47 85C0                    test eax, eax
  617. :00468D49 740E                    je 00468D59
  618. :00468D4B A114A9A700              mov eax, dword ptr [00A7A914]
  619. :00468D50 50                      push eax
  620. :00468D51 E84AF9F9FF              call 004086A0             <-- Play music at flaming skull (start) screen
  621. :00468D56 83C404                  add esp, 00000004
  622.  
  623. * Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
  624. |:00468D30(C), :00468D49(C)
  625. |
  626. :00468D59 C705189D740001000000    mov dword ptr [00749D18], 00000001
  627. :00468D63 E818E4FFFF              call 00467180
  628. :00468D68 A194D76E00              mov eax, dword ptr [006ED794]
  629. :00468D6D 8935189D7400            mov dword ptr [00749D18], esi
  630.  
  631.   -- snip non iformational code --
  632.  
  633. :00468E1C 83F808                  cmp eax, 00000008
  634. :00468E1F 750A                    jne 00468E2B
  635. :00468E21 C705803FC10015000000    mov dword ptr [00C13F80], 00000015
  636.  
  637. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  638. |:00468E1F(C)
  639. |
  640. :00468E2B 5E                      pop esi
  641. :00468E2C C3                      ret
  642.  
  643.     If you change the conditional jump at 468D30 to a non conditional jump the music at the main
  644. start screen will not be played.  This is the flaming skull screen where you can choose to start the
  645. game or change options.  One down, one to go, so let's lets check out the other call:
  646.  
  647.   -- Program code --
  648. :004692E0 E85BB1FCFF              call 00434440
  649. :004692E5 A1803FC100              mov eax, dword ptr [00C13F80]
  650. :004692EA 8BC8                    mov ecx, eax
  651. :004692EC C1E106                  shl ecx, 06
  652. :004692EF 03C8                    add ecx, eax
  653. :004692F1 8B148DC093A700          mov edx, dword ptr [4*ecx+00A793C0]
  654. :004692F8 52                      push edx
  655. :004692F9 E8A2F3F9FF              call 004086A0                       <-- Play level music
  656. :004692FE A194D76E00              mov eax, dword ptr [006ED794]
  657. :00469303 83C404                  add esp, 00000004
  658. :00469306 3BC3                    cmp eax, ebx
  659. :00469308 740A                    je 00469314
  660. :0046930A C705589E740001000000    mov dword ptr [00749E58], 00000001
  661.   -- Continuing program code --
  662.  
  663.     Simple choice here, just overwrite the call so it will not be made.  That takes care of all
  664. routines that play music for the different levels.  Now you can delete the music subdirectory and save
  665. an additional 172 megs of hard drive space.  So we started with 425 megs and cut it down to about 60 megs
  666. for just the actual game.  Everything essential to the game still works and if we had made a bad patch
  667. the game self terminates and tells you why.  I traced one routine (for the flaming skull) back one level
  668. and killed the call at that level.  The game came up and asked for the CD and when I hit cancel it self
  669. terminated and said it was looking for desert.wav file.  Anyways, this one is done and has been completly
  670. FiX'ed and can now be played without the CD.
  671.  
  672. 1.  Do a complete install (inlcuding videos, music, multiplayer)
  673. 2.  Make the following edits to the program file:
  674.  
  675. Edit the rmg.exe
  676. =============================================
  677. Search for: 74 0C B8 01 00  at offset 199,869
  678. Change to : 90 90 -- -- --
  679.  
  680.   -- Optional:  Kill all mpg videos --
  681.  
  682. Search for: E8 92 BB FC FF  at offset 425,449
  683. Change to : E9 B8 00 00 00
  684.  
  685.   -- Optional:  Kill Main screen and level music --
  686.  
  687. Search for: 75 27 C7 05 80  at offset 426,288
  688. Change to : EB -- -- -- --
  689.  
  690. Search for: E8 A2 F3 F9 FF  at offset 427,769
  691. Change to : B8 01 00 00 00
  692.  
  693. 3.  Delete the movies directory if you made the kill mpg patch
  694. 4.  Delete the music directory if you made the kill music patches
  695.  
  696. Static Vengeance
  697.